/*
 * @(#)Signer.java	1.25 01/12/12
 *
 * 版权所有2002 Sun MicroSystems，Inc.保留所有权利。SUN专有/机密。使用受许可条款的约束。
 */
 
package java.security;

import java.io.*;

/**
 * 此类用于表示还可以对数据进行数字签名的标识。
 *
 * 签名者私钥的管理是一个重要而敏感的问题，应该由适合其预期用途的子类来处理。
 *
 * @see Identity
 *
 * @version 	1.22, 01/31/97
 * @author Benjamin Renaud 
 */
public abstract class Signer extends Identity {

    private PrivateKey privateKey;

    /** 
     * 创建签名者此构造函数应仅用于序列化。
     */      
    protected Signer() {
	super();
    }


    /** 
     * Creates a signer with the specified identity name.
     * 
     * @param name the identity name.   
     */
    public Signer(String name) {
	super(name);
    }
    
    /** 
     * 创建具有指定标识名称和范围的签名者。
     * 
     * @param name the identity name.   
     *
     * @param scope the scope of the identity. 
     * 
     * @exception KeyManagementException 如果作用域中已存在同名的标识。
     */
    public Signer(String name, IdentityScope scope)
    throws KeyManagementException {
	super(name, scope);
    }

    /**
     * Returns this signer's private key.
     * 
     * @return 此签名者的私钥，如果尚未设置私钥，则返回NULL。
     */
    public PrivateKey getPrivateKey() {
	check("get.private.key");
	return privateKey;
    }

   /**
     * 设置此签名者的密钥对(公钥和私钥)。
     *
     * @param pair an initialized key pair.
     *
     * @exception InvalidParameterException 如果密钥对未正确初始化。
     * @exception KeyException 如果由于任何其他原因无法设置密钥对。
     */
    public final void setKeyPair(KeyPair pair) 
    throws InvalidParameterException, KeyException {
	check("set.private.keypair");
	PublicKey pub = pair.getPublic();
	PrivateKey priv = pair.getPrivate();

	if (pub == null || priv == null) {
	    throw new InvalidParameterException();
	}
	setPublicKey(pub);
	privateKey = priv;
    }

    String printKeys() {
	String keys = "";
	PublicKey publicKey = getPublicKey();
	if (publicKey != null && privateKey != null) {
	    keys = "\tpublic and private keys initialized";

	} else {
	    keys = "\tno keys";
	}
	return keys;
    }

    /**
     * 返回有关签名者的信息字符串。
     *
     * @return 有关签名者的信息字符串。
     */
    public String toString() {
	return "[Signer]" + super.toString();
    }
}

